package Test;
import java.util.LinkedList;

import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

import junit.framework.TestCase;

import Dominio.Productos;

import Presentacion.VentanaLogin;

public class testProveedor extends TestCase {
	VentanaLogin vLogin;//Para que no se tenga que crear varias veces
	public VentanaLogin iniciarSesion(){
		vLogin=new VentanaLogin();		
		vLogin.txtUsuario.setText("333333");
		vLogin.txtContrasena.setText("12345");		
		vLogin.btnAceptar.doClick();
		return vLogin;
	}
	public void testLoginP() {		
		iniciarSesion();
		assertTrue(vLogin.pro.isVisible());			
	}
	public void testAnadirProductosP(){		
		String nombre="Jamon Serrano";
		String precio="32.00";
		vLogin.pro.txtNombre.setText(nombre);
		vLogin.pro.txtPrecio.setText(precio);
		vLogin.pro.btnAnadirP.doClick();
		assertTrue((vLogin.pro.tableProductos.getModel().getValueAt(vLogin.pro.tableProductos.getModel().getRowCount()-1, 1).equals(nombre)) && (vLogin.pro.tableProductos.getModel().getValueAt(vLogin.pro.tableProductos.getModel().getRowCount()-1, 2).equals(precio)));			
		
	}
	public void testEliminarProductosP(){
		testAnadirProductosP();
		vLogin.pro.tableProductos.changeSelection(0, 1, false, false);
		String nombre=vLogin.pro.tableProductos.getModel().getValueAt(vLogin.pro.tableProductos.getSelectedRow(), 1).toString();
		vLogin.pro.btnEliminarP.doClick();
		assertTrue(comprobacionEliminacion(nombre, vLogin.pro.tableProductos));
	}
	public void testModificarProductosP(){
		testAnadirProductosP();
		int indice=0;
		vLogin.pro.tableProductos.changeSelection(indice, 1, false, false);
		String nombre="Salchichas";
		String precio="5.30";
		vLogin.pro.txtNombre.setText(nombre);
		vLogin.pro.txtPrecio.setText(precio);
		vLogin.pro.btnModificarP.doClick();
		assertTrue((vLogin.pro.tableProductos.getModel().getValueAt(indice, 1).toString().equals(nombre)) &&(vLogin.pro.tableProductos.getModel().getValueAt(indice, 2).toString().equals(precio)));
		
	}
	public void testAnadirCliente(){
		vLogin.pro.setVisible(true);
		String cif="686768";
		String nombre="Carrefour";
		String pais="España";
		String provincia="Ciudad Real";
		String direccion="c/ Felipe II";
		String codigoPostal="78683";
		vLogin.pro.cBDia.setSelectedItem("4");
		vLogin.pro.cBMes.setSelectedItem("Febrero");
		vLogin.pro.cBAno.setSelectedItem("2015");
		vLogin.pro.txtCif.setText(cif);
		vLogin.pro.txtnombre.setText(nombre);
		vLogin.pro.txtpais.setText(pais);
		vLogin.pro.txtprovincia.setText(provincia);
		vLogin.pro.txtdireccion.setText(direccion);
		vLogin.pro.txtcp.setText(codigoPostal);
		vLogin.pro.btnAnadir.doClick();
		assertTrue(vLogin.pro.tableClientes.getModel().getValueAt(vLogin.pro.tableClientes.getRowCount()-1, 1).equals(nombre));
	}
	
	public void testEliminarCliente(){
		vLogin.pro.tableClientes.changeSelection(0, 1, false, false);
		String nombre=vLogin.pro.tableClientes.getModel().getValueAt(vLogin.pro.tableClientes.getSelectedRow(), 1).toString();
		vLogin.pro.btnEliminar.doClick();
		assertTrue(comprobacionEliminacion(nombre, vLogin.pro.tableClientes));
	}
	
	public void testModificarCliente(){
		testAnadirCliente();
		int indice;
		vLogin.pro.tableClientes.changeSelection(0, 1, false, false);
		String CIF = (String) vLogin.pro.tableClientes.getValueAt(
				vLogin.pro.tableClientes.getSelectedRow(), 0);
		for (int i = 0; i < vLogin.pro.listaC.size(); i++) {
			if (CIF.equals(vLogin.pro.listaC.get(i).getCIF())) {
				vLogin.pro.txtCif.setText(vLogin.pro.listaC.get(i).getCIF());
				vLogin.pro.txtnombre.setText(vLogin.pro.listaC.get(i).getNombre());
				vLogin.pro.txtdireccion.setText(vLogin.pro.listaC.get(i).getDireccion());
				vLogin.pro.txtpais.setText(vLogin.pro.listaC.get(i).getPais());
				vLogin.pro.txtcp.setText(String.valueOf(vLogin.pro.listaC.get(i).getCp()));
				vLogin.pro.txtprovincia.setText(vLogin.pro.listaC.get(i).getProvincia());
			}
		}
			
		String nombre = "Carrefour";
		String ciudad = "Ciudad real";
		vLogin.pro.txtnombre.setText(nombre);
		vLogin.pro.txtprovincia.setText(ciudad);
		indice=vLogin.pro.tableClientes.getSelectedRow();
		vLogin.pro.btnModificar.doClick();
		assertTrue((vLogin.pro.tableClientes.getModel().getValueAt(indice, 1).equals(nombre)) && (vLogin.pro.tableClientes.getModel().getValueAt(indice, 3).toString().equals(ciudad)));
	}
	public void testMostrarExistencias() throws Exception{		
		cargarExistenciasP();		
		vLogin.pro.tableClientes.changeSelection(0, 1, false, false);		
		vLogin.pro.btnV.doClick();		
		assertTrue(comprobar(vLogin)/*&&/*vLogin.pro.vexistencias.isVisible()*/);
		
	}
	public void testCerrarSesionP(){
		vLogin.pro.btnCerrarSesion.doClick();
		assertTrue(vLogin.window.frmLogin.isVisible());
		
	}
	public void cargarExistenciasP() throws Exception{
		LinkedList <Productos> producto=new <Productos> LinkedList();		
		producto.add(new Productos("6","27.01", "Jamon Iberico"));
		producto.add(new Productos("10","15.81", "Paleta Iberico"));
		producto.add(new Productos("12","39.50", "Lomo artesano"));
		String titulos[]={"Nombre","Precio","Existencias"};
		String datos[]=new String [3];
		vLogin.cliente.m = new DefaultTableModel(null,titulos);
		for(int i=0;i<producto.size();i++){
			datos[0]=producto.get(i).getNombre();
			datos[1]=producto.get(i).getPrecio();
			datos[2]=producto.get(i).getExistencias();
			vLogin.cliente.m.addRow(datos);
		}		
		vLogin.pro.vexistencias.tableExistencias.setModel(vLogin.cliente.m);
		vLogin.cliente.tableProductos.setModel(vLogin.cliente.m);
		
	}
	public boolean comprobacionEliminacion(String nombre, JTable table){
		boolean eliminacion=true;
		for(int i=0; i < table.getRowCount(); i++){
			if(table.getModel().getValueAt(i, 1).toString().equals(nombre)){
				eliminacion=false;
			}
		}
		return eliminacion;
	}
	public boolean comprobar(VentanaLogin vLogin){
		boolean ok=true;
		for(int i=0;i< vLogin.cliente.tablePE.getModel().getRowCount() && ok;i++){
			if(!vLogin.cliente.tablePE.getModel().getValueAt(i, 0).equals(vLogin.pro.vexistencias.tableExistencias.getModel().getValueAt(i, 0))){
				ok=false;
			}
		}
		return ok;
	}
	 
	
}
